const http = require('http');
const url = require('url');

// 封装处理 JSONP 请求的函数
function handleJsonpRequest(req, res) {
    const parsedUrl = url.parse(req.url, true);
    const callback = parsedUrl.query.callback;

    // 验证回调函数名是否有效
    if (!callback || typeof callback!== 'string' ||!/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(callback)) {
        res.writeHead(400, { 'Content-Type': 'text/plain' });
        res.end('无效的回调函数名');
        return;
    }

    // 模拟要返回的数据
    const data = { message: '这是服务器返回的数据' };

    // 将数据包装在回调函数调用中
    const responseData = `${callback}(${JSON.stringify(data)})`;

    // 设置响应头
    res.writeHead(200, { 'Content-Type': 'application/javascript' });
    // 发送响应
    res.end(responseData);
}

// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
    const parsedUrl = url.parse(req.url, true);
    const pathname = parsedUrl.pathname;

    if (pathname === '/jsonp') {
        handleJsonpRequest(req, res);
    } else {
        res.writeHead(404, { 'Content-Type': 'text/plain' });
        res.end('404 Not Found');
    }
});

// 启动服务器
const port = 3000;
server.listen(port, () => {
    console.log(`服务器正在监听端口 ${port}`);
});
    
    



// 1 http 创建一个文件服务器 
// 2 设置响应头， content-type 告诉浏览器的文件类型 res.setHeader('Content-Type', 'application/javascript');
// 3  res.end(responseData); 发送相应结果  res.end 不仅仅可以发送字符串， 还可以发送buffer
// 4 res.end(json 字符窜)
// express 框架中对res 对象进行帮助，可以直接res.json 自动帮助将json 字符串化